{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "24e6c817-434d-4ee5-ac93-78bafae4cd8a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "87d387f5-9eb0-40c8-abaf-7f7a81d9cfae",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 生成模拟数据\n",
    "torch.manual_seed(42)\n",
    "x = 10 * torch.rand(50)\n",
    "y = 3 * x + 5 + torch.rand(50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "75949c8a-2c81-46d5-b375-6f2ab43dc7b8",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义线性层\n",
    "linear = torch.nn.Linear(1, 1)  # 输入特征数为1，输出特征数为1\n",
    "# 定义损失函数和优化器\n",
    "criterion = torch.nn.MSELoss()  # 均方误差损失\n",
    "optimizer = torch.optim.SGD(linear.parameters(), lr=0.01)  # 使用随机梯度下降优化器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "f15d9993-cf0f-483b-9f91-4e632ba2eec6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch [100/1000], Loss: 1.9513\n",
      "Epoch [200/1000], Loss: 0.9666\n",
      "Epoch [300/1000], Loss: 0.5030\n",
      "Epoch [400/1000], Loss: 0.2847\n",
      "Epoch [500/1000], Loss: 0.1819\n",
      "Epoch [600/1000], Loss: 0.1335\n",
      "Epoch [700/1000], Loss: 0.1107\n",
      "Epoch [800/1000], Loss: 0.1000\n",
      "Epoch [900/1000], Loss: 0.0949\n",
      "Epoch [1000/1000], Loss: 0.0925\n"
     ]
    }
   ],
   "source": [
    "# 训练模型\n",
    "epochs = 1000\n",
    "\n",
    "for epoch in range(epochs):\n",
    "    # 调整输入形状为(batch_size, input_features)\n",
    "    inputs = x.reshape(-1, 1)\n",
    "    targets = y.reshape(-1, 1)\n",
    "    \n",
    "    # 前向传播：计算预测值\n",
    "    outputs = linear(inputs)\n",
    "    \n",
    "    # 计算损失\n",
    "    loss = criterion(outputs, targets)\n",
    "    \n",
    "    # 反向传播与参数更新\n",
    "    optimizer.zero_grad()  # 梯度清零\n",
    "    loss.backward()        # 自动计算梯度\n",
    "    optimizer.step()       # 更新参数\n",
    "    \n",
    "    # 每100轮打印一次损失\n",
    "    if (epoch + 1) % 100 == 0:\n",
    "        print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "db94792e-9b46-429b-bc69-f857b90bf0a3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练得到的参数：w = 3.030313491821289, b = 5.278456211090088\n"
     ]
    }
   ],
   "source": [
    "w = model.linear.weight.item()\n",
    "b = model.linear.bias.item()\n",
    "print(f'训练得到的参数：w = {w}, b = {b}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "9ba720c2-bc87-4243-919a-1e8f2bdccf5e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7c1d0d1224d0>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(6,4))\n",
    "plt.scatter(x, y, label = 'Data')\n",
    "plt.plot(x, w * x + b, 'red', label = f'Fit: y={w:.2f}x+{b:.2f}')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "70d29caf-319e-406f-bdda-547c02c89121",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
